package com.yzqp.common.util;

import org.apache.commons.lang3.time.DateFormatUtils;

import java.security.SecureRandom;
import java.util.Date;
import java.util.UUID;

/**
 * 封装各种生成唯一性ID算法的工具类.
 *
 * @author zhangyq
 * @version 1.0.1
 * @date 2019-01-21
 */
public class IdGenUtils {

    public static int value1 = 0;

    private static SecureRandom random = new SecureRandom();

    /**
     * 生成唯一token
     */
    public static String generateUniqueToken() {
        //生成唯一id
//        String id= UUID.randomUUID().toString();
        String id = DateFormatUtils.format(new Date(), "yyyyMMddHHmmssS") + "-" + random.nextInt(9999);
        //替换uuid中的"-"
        id = id.replace("-", "");
        return id;
    }

    /**
     * 生成6位随机数字验证码
     *
     * @return
     */
    public static String getVerifyCode() {
        return String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
    }

    /**
     * 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
     */
    public static String uuid() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * 使用SecureRandom随机生成Long.
     */
    public static long randomLong() {
        return Math.abs(random.nextLong());
    }

    /**
     * 生成 日期+随机数 字符串
     *
     * @return
     * @author yinhongliang
     */
    public static String dateId() {
        return DateFormatUtils.format(new Date(), "yyyyMMddHHmmssS") + "-" + random.nextInt(9999);
    }

    /**
     * 生成5位随机数
     *
     * @return
     */
    public static String getFiveRandom() {
        return String.valueOf((int) ((Math.random() * 9 + 1) * 10000));
    }

    /**
     * 生成优惠券核销码
     * 17位
     * 规则：生成17位 当前时间流水
     *
     * @return
     */
    public static String generateQRNumber() {
        return DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS");
    }

    /**
     * 生成订单流水号
     * 20位
     *
     * @return
     */
    public static String generateOrderNumber() {
        return DateFormatUtils.format(new Date(), "yyyyMMddHHmmssS") + IdGenUtils.getFiveRandom();
    }

    public static void main(String[] args) {
        System.out.println(IdGenUtils.uuid());
        System.out.println(IdGenUtils.uuid());
        System.out.println(IdGenUtils.uuid().length());
        System.out.println(IdGenUtils.randomLong());
        System.out.println(IdGenUtils.randomLong());
        System.out.println(IdGenUtils.dateId());
        System.out.println(IdGenUtils.dateId());
        System.out.println(IdGenUtils.getVerifyCode());
        System.out.println(IdGenUtils.generateOrderNumber());
    }
}
